package com.zhao.utils;


import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import org.springframework.stereotype.Component;

@Component
@SuppressWarnings("all")
public final class HTMLUtil {

    private static final SensitiveWordBs WORD_BS = SensitiveWordBs.newInstance()
            .ignoreCase(true)
            .ignoreWidth(true)
            .ignoreNumStyle(true)
            .ignoreChineseStyle(true)
            .ignoreEnglishStyle(true)
            .ignoreRepeat(true)
            .enableNumCheck(false)
            .enableEmailCheck(false)
            .enableUrlCheck(false)
            .init();


    /**
     * 删除文章内的markdown
     * @param source 需要过滤的文本
     * @return 过滤后的内容
     */
    public static String deleteArticleTag(String source) {
        //删除HTML和markdown标签
        source = source.replaceAll("!\\[\\]\\((.*?)\\)", "")
                .replaceAll("<[^>]+>", "");
        return deleteTag(source);
    }

    /**
     * 删除评论内容标签
     * @param source 需要进行剔除HTML的文本
     * @return 过滤后的内容
     */
    public static String deleteCommentTag(String source) {
        // 敏感词过滤
        source = WORD_BS.replace(source);
        //保留图片标签
        source = source.replaceAll("(?!<(img).*?>)<.*?>", "")
                .replaceAll("(onload(.*?)=)", "")
                .replaceAll("(onerror(.*?)=)", "");
        return deleteTag(source);
    }

    /**
     * 删除标签
     * @param source 文本
     * @return 过滤后的文本
     */
    private static String deleteTag(String source) {
        //删除转义字符
        source = source.replaceAll("&.{2,6}?;", "");
        //删除script标签
        source = source.replaceAll("<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>", "");
        //删除style标签
        source = source.replaceAll("<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>", "");
        return source;
    }
}
